package com.system.demo.utils;


import com.system.demo.doMain.entity.User;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

/**
 * Jwt工具类
 * 注意点：
 * 1 生成的token，是可以通过Base64进行解密出明文信息
 * 2 Base64进行解密出明文信息，修改再进行编码，则会解密失败
 * 3 无法作废以颁布的token，除非该密钥
 */
import java.util.Date;

public class JWTUtils {

    //过期时间 7天
    private static final long EXPIRE= 60000 * 60 * 24 * 7;

    //加密密钥
    private static final String SECRET="xdClass.net168";

    //令牌前缀
    private static final String TOKEN_PREFIX="xdClass";

    //subject
    private static final String SUBJECT="xdClass";

    //根据用户信息 生成令牌
    public static String geneJsonWebToken(User user){
        String token= Jwts.builder().setSubject(SUBJECT)
                .claim("name",user.getName())
                .claim("password",user.getPassword())
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE))
                .signWith(SignatureAlgorithm.HS256,SECRET).compact();
        token=TOKEN_PREFIX+token;
        return token;
    }

    //校验token方法
    public static Claims checkJwt(String token){
        try{
            final Claims claims=Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token.replace(TOKEN_PREFIX,"")).getBody();
            return claims;
        }catch (Exception e){
            return null;
        }
    }

}
